import { fileURLToPath, URL } from "node:url";
import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";
import VueDevTools from "vite-plugin-vue-devtools";
import postcssenv from "postcss-preset-env";
import zksPlugin from "./Plugin/index.cjs";
import serverUser from "./Plugin/server.cjs";
import craeteHtmlPluginUser from "./Plugin/craeteHtmlPlugin.cjs";
import viteCompression from "vite-plugin-compression";
// import { createHtmlPlugin } from 'vite-plugin-html'
export default defineConfig((zks) => {
  // console.log(zks);
  console.log(zks.mode, process.cwd());
  // 服务端如何获取环境变量
  // const ads = loadEnv(zks.mode, process.cwd());
  const env = loadEnv(zks.mode, process.cwd());
  console.log(env);
  return {
    plugins: [
      vue(),
      vueJsx(),
      VueDevTools(),
      zksPlugin(),
      // createHtmlPlugin({
      //   inject: {
      //     data: {
      //       titile: zks.mode
      //     }
      //   }
      // }),
      craeteHtmlPluginUser({
        inject: {
          data: {
            title: zks.mode,
          },
        },
      }), //自己写的,
      serverUser(),
    ],
    // resolve: {
    //   alias: {
    //     "@": fileURLToPath(new URL("./src", import.meta.url)),
    //   },
    // },
    envPrefix: "ZKS_",
    // 具体来说，drop 选项用于配置在构建过程中应该删除哪些代码。在你的代码中，根据环境变量 VITE_NODE_ENV 的值，
    // 如果当前是开发环境，则不删除任何代码；如果是生产环境，
    // 则删除所有的 console 和 debugger 语句，这是一种常见的优化手段，可以减小生产环境代码的体积，提高运行效率。
    esbuild: {
      // drop: VITE_NODE_ENV === "development" ? [] : ["console", "debugger"],
    },
    css: {
      modules: {
        localsConvention: "dashes",
        scopeBehaviour: "local",
        hashPrefix: "zks", //没啥用  以提供的字符串进行hash解析
        generateScopedName: "[name]-[local]-[hash:10]",
        // generateScopedName: function (name, filename, css) {
        //   console.log(name, filename, css)
        //   return`${name}--`
        // },
        globalModulePaths: ["./b.module.css"], //除去不想模块画的属性
      },
      postcss: {
        plugins: [
          postcssenv(), //postcss插件的使用
        ],
      },
    },
    build: {
      outDir: "zks", //输出目录
      assetsDir: "static", //输出目录静态资源名称   下面已经配置了不会生效
      assetsInlineLimit: 1024, //1kb图片转为base64
      rollupOptions: {
        output: {
          entryFileNames: "js/zks-[hash].js",
          chunkFileNames: "js/[name]-[hash].js",
          assetFileNames: ({ name }) => {
            if (/\.(gif|jpe?g|png|svg)$/.test(name ?? "")) {
              return "images/[name][extname]";
            }
            if (/\.css$/.test(name ?? "")) {
              return "css/[name][extname]";
            }
            return "static/[name][extname]";
          },

          manualChunks: (id) => {
            //
            // 跳过node_modules缓存分包
            if (id.includes("node_modules")) {
              return "vendor";
            }
          },
        },
      },
    },
    server: {
      open: true,
      port: 7411,
    },
  };
});
